Scenario

어댑터는 어떤 인터페이스가 용도에 맞지 않을 때, 용도에 맞도록 중간에서 변환하는 기법이다.
struct Point{
int x, y;
};
struct Line{
Point start, end;
};
struct VectorObject{
virtual std::vector<Line>::iterator begin()=0;
virtual std::vector<Line>::iterator end()=0;
}
struct VectorRectangle: VectorObject{
VectorRectangle(int x, int y, int width, int height){
lines.emplace_back(Line{Point{x, y}, Point{x+width, y}});
lines.emplace_back(Line{Point{x+width, y}, Point{x+width, y+height}});
lines.emplace_back(Line{Point{x, y}, Point{x, y+height}});
lines.emplace_back(Line{Point{x, y+height}, Point{x+width, y+height}});
}
std::vector<Line>::iterator begin() override {
return lines.begin();
}
std::vector<Line>::iterator end() override {
return lines.end();
}
private:
std::vector<Line> lines;
};
위와 같이 사용자가 정의한 VectorRectangle 클래스를 이용해 사각형 벡터를 저장하고 있을 경우,
아래와 같이 제공되는 벡터를 그리기 위해 제공되는 인터페이스를 직접 이용할 수 없다.
void DrawPoints(CPointDC& dc, std::vector<Point>::iterator start, std::vector<Point>::iterator end){
for(auto i=start; i!=end; ++i) dc.SetPixel(i->x, i->y, 0);
}
// MS MFC lib CPaintDC
위의 DrawPoints 클래스는 MS MFC lib의 CPaintDC 클래스에서 따온 양식임

위의 그리기 인터페이스는 점을 찍는 기능만 제공한다.
선분을 그리기 위해서 적절한 어댑터를 구현해 주어야 한다.